package com.jvoid.core.model; import java.util.Collection; //import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.AuthorityUtils; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; //import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.MediaType; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder; import com.jvoid.core.uricostants.ServerUris; import com.jvoid.core.uricostants.URIConstants; /** * Uer Authentication Provider * * @author Gayatri * @version 1.0 */ public class UserAuthenticationProvider implements UserDetailsService { // JSONObject userservice; // public UserAuthenticationProvider(JSONObject userservice) { // this.userservice = userservice; // } @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { // Make an API Call to the Customer WAR to get the user data based on this email address. //JSONObject user = userservice.getCustomerByEmail(username); RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); headers.set("Accept", MediaType.APPLICATION_JSON_VALUE); UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(ServerUris.CUSTOMER_SERVER_URI+URIConstants.GET_CUSTOMER_BY_EMAIL) .queryParam("params", "{email: " + username + "}"); HttpEntity<?> entity = new HttpEntity<>(headers); HttpEntity<String> returnString = restTemplate.exchange(builder.build().toUri(), HttpMethod.GET, entity, String.class); SerializableJSONObject user = null; try { JSONObject temp = new JSONObject(returnString.getBody()); user = new SerializableJSONObject(temp); System.out.println("User: " + user.toString()); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } if(user == null) { throw new UsernameNotFoundException(String.format("User %s not exist!", username)); } return new UserRepositoryUserDetails(user); } private final static class UserRepositoryUserDetails extends SerializableJSONObject implements UserDetails { private static final long serialVersionUID = 1L; private SerializableJSONObject user; private UserRepositoryUserDetails(SerializableJSONObject user) { super(user); this.user = user; } @Override public Collection<? extends GrantedAuthority> getAuthorities() { return AuthorityUtils.createAuthorityList("ROLE_CUSTOMER"); } @Override public String getUsername() { try { return user.getJSONObject().getString("email"); } catch (JSONException e) { return ""; } } @Override public String getPassword() { try { return user.getJSONObject().getString("password"); } catch (JSONException e) { return ""; } } @Override public boolean isAccountNonExpired() { return true; } @Override public boolean isAccountNonLocked() { return true; } @Override public boolean isCredentialsNonExpired() { return true; } @Override public boolean isEnabled() { return true; } } }